package com.hsjk.szwj.module.train.dal.mysql.product;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hsjk.szwj.framework.common.pojo.PageParam;
import com.hsjk.szwj.framework.common.pojo.PageResult;
import com.hsjk.szwj.framework.mybatis.core.mapper.BaseMapperX;
import com.hsjk.szwj.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminProductSpuPageReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.course.AppCoursePageReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.course.AppCourseWithPriceRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.product.SpuListRespVO;
import com.hsjk.szwj.module.train.dal.dataobject.product.ProductSpuDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Arrays;

@Mapper
public interface IProductSpuMapper extends BaseMapperX<ProductSpuDO> {

    IPage<AppCourseWithPriceRespVO> selectSpuCoursePage(Page<AppCoursePageReqVO> page, @Param("tenantId") Long tenantId,@Param("carType") String carType);

//    default PageResult<AppCourseWithPriceRespVO> selectSpuCoursePage(AppCoursePageReqVO reqVO) {
//        Page<AppCourseWithPriceRespVO> courseDOPage = selectJoinPage(
//                new Page<>(reqVO.getPageNo(), reqVO.getPageSize()),
//                AppCourseWithPriceRespVO.class,
//                new MPJLambdaWrapper<ProductSpuDO>()
//                        .select(CourseDO::getId, CourseDO::getCourseName, CourseDO::getCourseCoverUrl,
//                                CourseDO::getIsRecommend)
//                        .select(ProductSkuDO::getPrice)
//                        .selectAs(ProductSpuDO::getVirtualSalesCount, "salesCount")
//                        // 普通商品
//                        .eq(ProductSpuDO::getSpuType, 2)
//                        // 上架状态
//                        .eq(ProductSpuDO::getStatus, 1)
//                        .leftJoin(ProductSkuDO.class, ProductSkuDO::getSpuId, ProductSpuDO::getId)
//                        .leftJoin(ProductSkuBindDO.class, ProductSkuBindDO::getSkuId,
//                                ProductSkuDO::getId)
//                        .leftJoin(CourseDO.class, CourseDO::getId, ProductSkuBindDO::getBindId)
//                        .orderByAsc(ProductSpuDO::getSortNo)
//        );
//        // 将查询结果转换为分页结果
//        return new PageResult<>(courseDOPage.getRecords(), courseDOPage.getTotal());
//    }

    default PageResult<ProductSpuDO> selectNormalSpuPageByCategoryId(
            Long categoryId, PageParam pageParam
    ) {
        return selectPage(pageParam, new LambdaQueryWrapperX<ProductSpuDO>()
                .eq(ProductSpuDO::getSpuType, 1)
                .eq(ProductSpuDO::getCategoryId, categoryId)
                .orderByDesc(ProductSpuDO::getCreateTime));
    }

    default PageResult<ProductSpuDO> selectNormalSpuPageByCarType(String carType, PageParam pageParam){
        return selectPage(pageParam, new LambdaQueryWrapperX<ProductSpuDO>()
                .eq(ProductSpuDO::getSpuType, 1)
                .eq(ProductSpuDO::getStatus, 1)
                .eq(ProductSpuDO::getCarType, carType)
                .orderByAsc(ProductSpuDO::getSortNo));
    }

    default PageResult<ProductSpuDO> selectNormalSpuPage(PageParam pageParam) {
        return selectPage(pageParam, new LambdaQueryWrapperX<ProductSpuDO>()
                .eq(ProductSpuDO::getSpuType, 1)
                .eq(ProductSpuDO::getStatus, 1)
                .orderByAsc(ProductSpuDO::getSortNo));
    }

    default PageResult<ProductSpuDO> selectPage(AdminProductSpuPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<ProductSpuDO>().eqIfPresent(ProductSpuDO::getSpuType, reqVO.getSpuType())
                .orderByDesc(Arrays.asList(ProductSpuDO::getCreateTime, ProductSpuDO::getCreateTime)));
    }
}
